﻿--- Eliminar las funciones existentes sin importar el numero ni tipo de parametros
SELECT * FROM "DropFunction_AWIL"('FuncOrdTrabajoRecMercanciaItemSubItemFoto');
--- crear una nueva funcion
CREATE FUNCTION "FuncOrdTrabajoRecMercanciaItemSubItemFoto"(
	 IN	"@OP" CHARACTER VARYING(64)
	,IN	"@paramAux" TEXT
	,INOUT	"@id" INTEGER
	,INOUT	"@fechaGrab" timestamp
	,INOUT	"@usuarioGrab" character varying(32)
	,INOUT	"@activo" boolean
	,INOUT	"@codOrdTrabajo" character varying(16)
	,INOUT	"@codOrdTrabajoRecMercancia" CHARACTER VARYING(16)
	,INOUT	"@codOrdTrabajoRecMercanciaItemSubItem" CHARACTER VARYING(16)
	,INOUT	"@nombreArchivoServidor" CHARACTER VARYING(256)
	,INOUT	"@nombreArchivoOriginal" CHARACTER VARYING(128)
	,INOUT	"@observaciones" CHARACTER VARYING(256)	
)RETURNS 
	SETOF RECORD
AS $$ 
DECLARE
	Auxiliar TEXT;
	pagina INTEGER;
	numRegistrosPorPagina INTEGER;
	codOrdTrabajo CHARACTER VARYING(16);
	codRecMercancia CHARACTER VARYING(16);
	codRecMercanciaItemSubItem CHARACTER VARYING(16);
	
BEGIN

	/*SELECT BY ID*/
	IF "@OP"='selectById' THEN
		RETURN	QUERY
		SELECT	"id","fechaGrab","usuarioGrab","activo","codOrdTrabajo","codOrdTrabajoRecMercancia","codOrdTrabajoRecMercanciaItemSubItem","nombreArchivoServidor","nombreArchivoOriginal","observaciones"
		FROM	"OrdTrabajoRecMercanciaItemSubItemFoto"
		WHERE	"id"="@id";
	RETURN;
	END IF;

	/*SELECT BY ID OT*/
	IF "@OP"='selectByIdOrdTrabajoRecMercanciaItemSubItem' THEN

		--- obtengo la pagina
		Auxiliar = substring("@paramAux", 1, position('|' in "@paramAux") -1); 
		pagina=coalesce(CAST(Auxiliar as INTEGER),0);
		--- obtengo el numero de registros por pagina
		Auxiliar = substring("@paramAux", position('|' in "@paramAux")+1, length("@paramAux")); 
		numRegistrosPorPagina=coalesce(CAST(Auxiliar as INTEGER),-1);
		
		--- con esta sentencia muestro todos los resultados de la tabla
		if numRegistrosPorPagina<0 then 
			numRegistrosPorPagina=1000000;
		end if;

		RETURN	QUERY
		SELECT	t1."id",t1."fechaGrab",t1."usuarioGrab",t1."activo",t1."codOrdTrabajo",t1."codOrdTrabajoRecMercancia",t1."codOrdTrabajoRecMercanciaItemSubItem",t1."nombreArchivoServidor",t1."nombreArchivoOriginal",t1."observaciones"
		FROM	"OrdTrabajoRecMercanciaItemSubItemFoto" t1 INNER JOIN "OrdTrabajoRecMercanciaItemSubItem" t2 ON t1."codOrdTrabajoRecMercancia"=t2."codOrdTrabajoRecMercancia" AND t1."codOrdTrabajoRecMercanciaItemSubItem"=t2."codOrdTrabajoRecMercanciaItemSubItem"
		WHERE	t2.id="@id"
		ORDER BY t1."id"
		LIMIT numRegistrosPorPagina OFFSET numRegistrosPorPagina*pagina	;
	RETURN;
	END IF;

	/*SELECT TODOS*/
	/*IF "@OP"='selectAll' THEN
		RETURN	QUERY
		SELECT	"id","fechaGrab","usuarioGrab","activo","codOrdTrabajo","codOrdTrabajoRecMercancia","codOrdTrabajoRecMercanciaItem","nombreArchivoServidor","nombreArchivoOriginal","observaciones"
		FROM	"OrdTrabajoRecMercanciaItemSubItemFoto";
	RETURN;
	END IF;
	*/

	/*INSERTAR NUEVO REGISTRO*/
	IF "@OP"='insert' THEN

		-- obtengo el codigo del reconocimiento y del item
		select	"codOrdTrabajoRecMercanciaItemSubItem" INTO codRecMercanciaItemSubItem
		from	"OrdTrabajoRecMercanciaItemSubItem" 
		where	id="@id";

		select	"codOrdTrabajoRecMercancia" INTO codRecMercancia
		from	"OrdTrabajoRecMercanciaItemSubItem" 
		where	id="@id";

		select	"codOrdTrabajo" INTO codOrdTrabajo	
		from	"OrdTrabajoRecMercanciaItemSubItem" 
		where	id="@id";
				
	
		-- Grabo el registro
		INSERT INTO "OrdTrabajoRecMercanciaItemSubItemFoto" ("usuarioGrab","usuarioUltMod","activo","codOrdTrabajo","codOrdTrabajoRecMercancia","codOrdTrabajoRecMercanciaItemSubItem","nombreArchivoServidor","nombreArchivoOriginal","observaciones")
		VALUES	 ("@usuarioGrab","@usuarioGrab",TRUE,codOrdTrabajo,codRecMercancia,codRecMercanciaItemSubItem,"@nombreArchivoServidor","@nombreArchivoOriginal","@observaciones");

		RETURN	QUERY
		SELECT	"id","fechaGrab","usuarioGrab","activo","codOrdTrabajo","codOrdTrabajoRecMercancia","codOrdTrabajoRecMercanciaItemSubItem","nombreArchivoServidor","nombreArchivoOriginal","observaciones"
		FROM	"OrdTrabajoRecMercanciaItemSubItemFoto"
		ORDER BY id DESC LIMIT 1;

	RETURN;
	END IF;

	/*ACTUALIZAR REGISTRO*/
	IF "@OP"='update' THEN

		if trim("@nombreArchivoOriginal")='' then 
			Auxiliar = 'Debe indicar el nombre del archivo.';
			RAISE EXCEPTION '%', Auxiliar;
		end if;

		--- Actualizo el registro
		UPDATE	
			"OrdTrabajoRecMercanciaItemSubItemFoto" 
		SET	
			-- "activo"=coalesce("@activo","activo")
			 "fechaUltMod"=NOW() 
			,"usuarioUltMod"="@usuarioGrab" 
			--,"codOrdTrabajo"="@codOrdTrabajo"
			--,"codOrdTrabajoRecMercancia"="@codOrdTrabajoRecMercancia"
			--,"codOrdTrabajoRecMercanciaItem"="@codOrdTrabajoRecMercanciaItem"
			--,"nombreArchivoServidor"="@nombreArchivoServidor"
			,"nombreArchivoOriginal"="@nombreArchivoOriginal"
			,"observaciones"="@observaciones"
		WHERE	
			"id"="@id";

	RETURN;
	END IF;

	/*ELIMINAR REGISTRO*/
	IF "@OP"='delete' THEN

		--- Borro el registro
		DELETE FROM "OrdTrabajoRecMercanciaItemSubItemFoto" 
		WHERE "id"="@id";

	RETURN;
	END IF;


--- Controlo que se haya digitado el OP correctamente
IF "@OP" IS NOT NULL THEN
	Auxiliar = 'El OP "' || "@OP" || '" No existe, verifique.';
	RAISE EXCEPTION '%', Auxiliar;
RETURN;
END IF;
END;
$$ LANGUAGE 'plpgsql';

